package middleWare

import (
	"fmt"
	"net/http"
	"time"
)

type middleWare struct {
	r http.Handler
}

// 他会把请求两次，为什么呢，因为有一次可能是 头像（/favicon.ico）
// 在路由的外面写中间件是一件错误的事情
// 你可以在注入 路由时 添加 中间件
func (this middleWare) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	start := time.Now().UnixNano()
	fmt.Println("------------------ 请求开始 ------------------")
	fmt.Printf("请求方式：%v,\n", r.Method)
	fmt.Printf("请求header:%v\n", r.Header)
	fmt.Printf(" 请求body:%v\n",  r.Body)
	this.r.ServeHTTP(w, r)
	end := time.Now().UnixNano()

	fmt.Printf("------------------ 请求结束，耗时(微秒)：%v ------------------\n\n", (end-start)/1000)
	// 1 秒 == 1000 毫秒
	// 1 毫秒 == 1000 微秒
	// 1 微妙 == 1000 纳秒

}

func NewMiddleWare(router http.Handler) http.Handler {
	m := middleWare{}
	m.r = router
	return m
}
